﻿#define _CRT_SECURE_NO_WARNINGS


#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

//int main() {
//
//    string str1;
//    string str2;
//    int n = 0;
//    cin >> n;
//    vector<string> strs(n);
//
//    cin >> str1;
//    cin >> str2;
//
//    for (int i = 0; i < n; i++)
//    {
//        cin >> strs[i];
//    }
//
//    auto falg1 = find(strs.begin(), strs.end(), str1);
//
//    auto falg2 = find(strs.begin(), strs.end(), str2);
//
//    if (falg1 == strs.end() || falg2 == strs.end())
//    {
//        cout << -1;
//        return 0;
//    }
//    else
//    {
//        auto tmpf1 = falg1;
//        auto tmpf2 = falg2;
//        while (tmpf1 != strs.end() && tmpf2 != strs.end())
//        {
//            tmpf1 = find(falg2, strs.end(), str1);
//            if (tmpf1 != strs.end())
//            {
//                falg1 = tmpf1;
//            }
//            tmpf2 = find(tmpf1, strs.end(), str2);
//            if (tmpf2 != strs.end())
//            {
//                falg2 = tmpf2;
//            }
//        }
//        cout << abs(falg1 - falg2);
//    }
//
//    return 0;
//}
//



class Solution
{
public:
    int minOperations(vector<int>& nums, int x)
    {
        int sum = 0;
        for (int a : nums) sum += a;
        int target = sum - x;
        // 细节问题
        if (target < 0) return -1;
        int ret = -1;
        for (int left = 0, right = 0, tmp = 0; right < nums.size(); right++)
        {
            tmp += nums[right]; // 进窗⼝
            while (tmp > target) // 判断
                tmp -= nums[left++]; // 出窗⼝
            if (tmp == target) // 更新结果
                ret = max(ret, right - left + 1);
        }
        if (ret == -1) return ret;
        else return nums.size() - ret;
    }
};








int main()
{

    vector<int> v{ 1,1,4,2,3 };
    Solution().minOperations(v, 5);

    return 0;
}